SEO: fix CTR + internal links for "agentic infrastructure" query - #21062
SEO: fix CTR + internal links for "agentic infrastructure" query#21062workprentice[bot] wants to merge 2 commits into
Conversation
- Rewrite the-agentic-infrastructure-era meta_desc to lead with the answer-first definition (was reading as a dated launch announcement, suppressing CTR at position ~6.7 for the query 'agentic infrastructure') - Add an early orientation link from that post to the definitional what-is/what-is-agentic-infrastructure page - Add exact-phrase internal links from two more blog posts that already use the bare phrase 'agentic infrastructure' in prose - Split a what-is-agentic-infrastructure.md FAQ section so its comparison table sits under a non-question sub-heading, preventing raw markdown table syntax from leaking into the rendered FAQPage acceptedAnswer text (verified via isolated Hugo schema harness: 19 clean FAQ entities, zero leaked '|'/'#'/code-fence characters)
Pre-merge Review — Last updated 2026-08-22T00:21:53ZTip Summary: An SEO pass for the "agentic infrastructure" query: three blog posts gain an inline link to Review confidence:
Investigation log
🔍 Verification trail18 claims extracted · 9 verified · 0 unverifiable · 0 contradicted
📊 Editorial balanceSingle-subject post; balance check N/A. 🚨 Outstanding in this PRNo outstanding findings in this PR.
|
…e two-meanings section Move the compounding/conclusion sentence to close the section after the comparison table instead of before it, per the pre-merge review's non-blocking readability note. No schema impact: the table remains under the non-question '### The two meanings compared' sub-heading.
|
Your site preview for commit 78a291c is ready! 🎉 http://www-testing-pulumi-docs-origin-pr-21062-78a291c3.s3-website.us-west-2.amazonaws.com Changed pages: |
…#21072) * Fix internal links to old /docs/concepts/ URLs (redirect-hop cleanup) Several docs, blog, and tutorial pages still link to the pre-restructure /docs/concepts/... URLs, which now 301 (some via a double hop) to their current /docs/iac/concepts/..., /docs/esc/concepts/, or /docs/reference/glossary/ locations. Updated 79 files (154 link occurrences, both root-relative markdown links and fully-qualified https://www.pulumi.com/... links) to point directly at the final destination, verified live against the current redirect map. Every fragment (#anchor) and the handful of double-hop cases (missing trailing slash -> slash -> new path) were preserved/collapsed correctly. One additional file with the same pattern (content/blog/why-choose-pulumi-over-terraform/index.md) was intentionally left untouched because it already has open PRs (#21062, #21066) touching it today; filed a follow-up board card to catch it separately. * Address pre-merge review: fix stale anchors and mislabeled links Follow-up to the automated review of the /docs/concepts/ redirect-hop cleanup. The path rewrites were correct, but several rewritten links kept a #fragment whose section had moved off the destination page entirely, adding back a second (client-side JS) redirect hop -- exactly what this PR set out to remove: - #components -> /docs/iac/concepts/components/ - #autonaming -> /docs/iac/concepts/resources/names/#autonaming - #urns -> /docs/iac/concepts/resources/names/#urns - #dependson -> /docs/iac/concepts/resources/options/dependson/ - #explicit-provider-configuration -> /docs/iac/concepts/providers/ - #additionalsecretoutputs -> /docs/iac/concepts/resources/options/additionalsecretoutputs/ - #transformations -> /docs/iac/concepts/resources/options/transformations/ Applied across all lines in this PR's diff carrying these anchors (verified each target live), including a couple the review didn't individually cite but that matched the same pattern. Also fixed two mislabeled docs-page links flagged by review in content/docs/iac/guides/migration/import/_index.md: a `retainOnDelete` mention that pointed at the unrelated `protect` option's page (now points at its own retainOnDelete page), and a `#autonaming` anchor pointing at the wrong page (now the names page). Fixed three "Pulumi Service" (deprecated product name) mentions on lines this PR already touches, per STYLE-GUIDE.md: keep-your-secrets-secure-by-default, six-things-about-pulumi-service, and stack-readme now say Pulumi Cloud / Pulumi Cloud console, and the six-things and keep-your-secrets posts' own links to the old /product/pulumi-service/ and /docs/pulumi-cloud/self-hosted/ URLs (which themselves redirect) now point directly at their live targets. Verified: node ./scripts/lint/lint-markdown.js and yarn prettier --check on all 17 touched files, 0 errors; every new/changed anchor and link target fetched live to confirm a 200 response before use. * Address second pre-merge review pass: finish Pulumi Cloud rename, style suggestions - Finish the Pulumi Service -> Pulumi Cloud rename in six-things-about-pulumi-service/index.md (blocker): the prior commit only updated the one line the style linter flagged, leaving six more mentions and one /product/pulumi-service/ alias hop in the same post. - Apply 26 of 27 flagged style suggestions across 20 files: punctuation, wordiness, filler, weasel words, difficulty qualifiers, spacing, vague link text, an unbacked CLI command, and a directional reference. - Decline one word-choice suggestion (double click -> double select) in six-things-about-pulumi-service/index.md as not a real improvement; double-click is a named UI gesture with no natural select equivalent. Verified: yarn prettier --check and node ./scripts/lint/lint-markdown.js both pass clean on all touched files. * Fix low-confidence style-edit regressions flagged in third review pass The 483d4d1 style sweep dropped meaning or grammar in five spots while clearing linter flags on adjacent words: - keep-your-secrets-secure-by-default L34: restore the "often" hedge ("is enough" -> "is often all you need") so the claim isn't stronger than the original and isn't contradicted by the next sentence. - ai-slack-bot-...-pulumi-on-aws L284: same shape, milder -- restore "often" before "happens" for the same reason. - iac-best-practices-understanding-code-organization-stacks L82: restore the coordinating clause the linter's target word was carrying ("lightweight to create or delete" -> "lightweight, and creating or deleting one is quick"). - next-level-iac-pulumi-runtime-logic L293, L331: restore "immediately" before "before the program exits" -- the removed "just" was temporal, not a difficulty qualifier, and matches the Node.js/Python docs this section quotes. - six-things-about-pulumi-service L48: fix a pre-existing "such the current git SHA" typo (missing "as") while already touching this line for the Pulumi Cloud rename. Verified: yarn prettier --check and node ./scripts/lint/lint-markdown.js both pass clean on all 5 touched files. --------- Co-authored-by: workprentice <257153108+workprentice@users.noreply.github.com>
Fixes the outstanding finding from the pre-merge review: - content/docs/iac/guides/clouds/aws/eks.md:307 -- a two-line markdown link the earlier single-line grep missed; repoints to the canonical /docs/iac/concepts/resources/options/transforms/. - scripts/search/rank.js:80 -- the search-ranking boost for concepts pages checked the retired /docs/concepts/ prefix, so it silently fell through to the generic docs score (860) instead of 890. - theme/src/ts/redirects.ts -- "#outputs-and-strings" now lands on the section anchor (#using-string-interpolation) instead of the top of the page, matching the other 33 entries' precision and the stub page's own redirect_to target. content/blog/why-choose-pulumi-over-terraform/index.md's three absolute-URL survivors are intentionally left out of this PR: that file already has two open PRs against it (#21062, #21066) and is tracked separately.
* Fix internal links to old /docs/concepts/ URLs missed by #21072 PR #21072 rewrote 79 files of content/ links from old /docs/concepts/* to their current /docs/iac/concepts/*, /docs/esc/concepts/*, and /docs/reference/glossary/* destinations, but its sweep covered content/ markdown links only. Three files outside that scope still pointed at old dead-hop paths: - layouts/migrate/terraform.html: a template href, not a content link - assets/openapi/tag-intros/stacks.md: OpenAPI docs intro fragment - content/docs/iac/concepts/resources/_index.md: a client-side JS hash-redirect map (5 of its 22 entries still pointed at the old paths, doing the same job the map exists for but landing on another redirect hop instead of the final page) Each old path was verified against its live redirect chain before rewriting, confirming the new destination resolves 200 directly: - /docs/concepts/vs/terraform -> /docs/iac/comparisons/terraform/ - /docs/concepts/stack/ -> /docs/iac/concepts/stacks/ - /docs/concepts/resources/components -> /docs/iac/concepts/components/ - /docs/concepts/resources/names -> /docs/iac/concepts/resources/names/ - /docs/concepts/resources/get -> /docs/iac/concepts/functions/get-functions/ The #urns and #autonaming anchors were confirmed present on the new resources/names/ page. content/blog/why-choose-pulumi-over-terraform/index.md is intentionally left untouched here; it is still blocked by open PRs #21062 and #21066 and is tracked separately. node ./scripts/lint/lint-markdown.js and ./scripts/prettier.sh --check both pass on the changed files (the one markdown-lint finding on assets/openapi/tag-intros/stacks.md is a pre-existing missing-heading warning on master, unrelated to this change). --- 🧠 *This PR was created by [workprentice](https://github.com/workprentice).* * Complete redirect-hop cleanup: TS redirect maps, toc.ts, and remaining stale content links PR #21138 fixed 3 non-content/ surfaces (an asset, the resources hash-redirect map, and a layout template) but left several sibling defects of the same class: - theme/src/ts/redirects.ts: a client-side hash-redirect map for the old /docs/intro/concepts/programming-model/ page pointed all 34 entries at dead /docs/concepts/* hops. Rewrote every entry to its live /docs/iac/concepts/* (or /docs/iac/concepts/inputs-outputs/*, /docs/iac/concepts/providers/*, etc.) destination, verified 200 with no further hop. - theme/src/ts/toc.ts: the left-nav active-state map still keyed off the old /docs/concepts/ path. - content/docs/iac/concepts/resources/_index.md: the hash-redirect map added by #21138 itself was missing trailing slashes on 16 of its 28 targets, each of which 302-redirects to the slashed form -- the same dead-hop defect this whole cleanup exists to remove. Added trailing slashes throughout. - Six remaining content files (archetypes template, two blog posts, the insights search reference-link footnotes, and the k8s operator integration page) still linked to old /docs/concepts/* paths; rewrote to their current /docs/iac/concepts/* destinations. Every new destination verified live against https://www.pulumi.com with redirects disabled: all return 200 directly. A further stale link was found in static-prebuilt/ ESC SDK reference HTML, but those files are generated from pulumi/esc's own SDK docstrings at build time, so fixing them here would be overwritten on next regeneration -- tracked separately for a pulumi/esc-side fix. * Fold in the 3 review-flagged /docs/concepts/ survivors Fixes the outstanding finding from the pre-merge review: - content/docs/iac/guides/clouds/aws/eks.md:307 -- a two-line markdown link the earlier single-line grep missed; repoints to the canonical /docs/iac/concepts/resources/options/transforms/. - scripts/search/rank.js:80 -- the search-ranking boost for concepts pages checked the retired /docs/concepts/ prefix, so it silently fell through to the generic docs score (860) instead of 890. - theme/src/ts/redirects.ts -- "#outputs-and-strings" now lands on the section anchor (#using-string-interpolation) instead of the top of the page, matching the other 33 entries' precision and the stub page's own redirect_to target. content/blog/why-choose-pulumi-over-terraform/index.md's three absolute-URL survivors are intentionally left out of this PR: that file already has two open PRs against it (#21062, #21066) and is tracked separately. * Fix crawler-facing meta refresh to skip the /docs/concepts redirect hop The two retired-URL stub pages (programming-model.md and programming-model-previous.md) still pointed their meta refresh at /docs/concepts, which now resolves as a 302-then-301 chain before landing on /docs/iac/concepts/. Point the refresh straight at the final destination instead, matching the visible prose link directly beneath it. Re-swept current master for the same defect class: the other three instances found (assets/openapi/tag-intros/stacks.md and the theme/src/ts/redirects.ts anchor map) are already fixed by this PR's earlier commits. * Remove dead /docs/using-pulumi/ ranking branch from search rank.js Review flagged this as a sibling of the /docs/concepts/ prefix defect this PR fixes: content/docs/using-pulumi no longer exists, and every remaining /docs/using-pulumi/... occurrence under content/docs/ is an `aliases:` entry (a historical redirect source), not a page's own `url:`. No indexed page's href ever starts with /docs/using-pulumi/, so the branch never fired -- pages that used to live there now score 860 or 870 via fallthrough, same as any other docs page. The content that used to live under /docs/using-pulumi/ moved to three different trees (iac/, insights/policy/, administration/) with no single successor prefix, so there's no one replacement string to substitute -- removing the dead branch is the honest fix rather than repointing it. --------- Co-authored-by: workprentice <257153108+workprentice@users.noreply.github.com>
Summary
Search Console shows the query "agentic infrastructure" (roughly 1,500 impressions over the trailing 90 days) sitting just outside page one, in the position band where targeted on-page and internal-linking fixes tend to move the needle fastest. On investigation, the on-page basics one would normally check first (title/meta_desc exact-phrase match, an answer-first definition, FAQ schema) turned out to already be fully shipped on
/what-is/what-is-agentic-infrastructure/. That page is well-optimized but gets very little of this query's traffic, because almost no internal links point to it with the bare phrase as anchor text, and because the page currently absorbing most of the traffic —/blog/the-agentic-infrastructure-era/— reads as a dated launch announcement rather than a definition, which likely explains a click-through rate well below what its ranking position would normally earn.This PR is a small, targeted fix on both fronts rather than a rewrite:
content/blog/the-agentic-infrastructure-era/index.md: themeta_descnow leads with the plain definition ("Agentic infrastructure is cloud infrastructure that AI agents provision, govern, and operate through code...") instead of "what we're shipping today," and a one-line orientation link to the what-is page was added right after the<!--more-->break, ahead of Joe Duffy's own copy (untouched otherwise — title is his editorial headline, not an SEO field, and was left alone).bring-your-terraform-estate-into-the-agentic-era/index.mdandwhy-choose-pulumi-over-terraform/index.md. (Checked every other page using the phrase; several either already link it, use it inside an unlinkable compound like "agentic infrastructure engineer," or only appear in a bolded label — those were left alone rather than forcing an awkward link.)acceptedAnswer.texthad a raw markdown comparison table leaking into it verbatim (|,---, bold/italic markers). The collector's known any-heading answer-boundary fix (PR schema: any markdown heading terminates a FAQ answer, not just "## " #20841) is already live in master, but a table sitting directly under a question heading with no intervening non-question sub-heading still bleeds through by design. Fixed by shortening that section's direct answer to clean prose and moving the comparison table under a new non-question### The two meanings comparedsub-heading, which the collector always treats as a hard stop. No template change — this is a one-file content restructure, andfaq-entity.htmlitself was left untouched.Verification
layouts/partials/schema/+ its dependencies + the real content file) and parsed the rendered<script type="application/ld+json">block directly: FAQPage now has 19 cleanmainEntityentries, zero leaked|/#/code-fence characters in anyacceptedAnswer.text; the affected entity's answer is now 545 chars of clean prose instead of leaking a raw markdown table.node scripts/lint/lint-markdown.jsagainst all 4 changed files: 0 errors./what-is/what-is-agentic-infrastructure/) matches the file's real content slug.Not in scope here (tracked separately)
faq-entity.htmltemplate-level any-heading fix is already shipped (PR schema: any markdown heading terminates a FAQ answer, not just "## " #20841) — verified still present in master, no further template work needed.🧠 This PR was created by workprentice.